let displayText = new Clutter.Text({ color: MATRIX_GREEN,
font_name: MATRIX_FONT, text: '' });
eventHandler.append(displayText, Big.BoxPackFlags.EXPAND);
+
+ let borderPaintTarget = null;
+ let borderPaintId = null;
+ eventHandler.connect('destroy', Lang.bind(this, function() {
+ if (borderPaintTarget != null)
+ borderPaintTarget.disconnect(borderPaintId);
+ }));
+
eventHandler.connect('button-press-event', Lang.bind(this, function (actor, event) {
let global = Shell.Global.get();
Clutter.ungrab_pointer(eventHandler);
global.stage.set_key_focus(this._entry);
return true;
}));
+
eventHandler.connect('motion-event', Lang.bind(this, function (actor, event) {
let global = Shell.Global.get();
let [stageX, stageY] = event.get_coords();
stageX,
stageY);
displayText.text = '<inspect x: ' + stageX + ' y: ' + stageY + '> ' + target;
+ if (borderPaintTarget != null)
+ borderPaintTarget.disconnect(borderPaintId);
+ borderPaintTarget = target;
+ borderPaintId = Shell.add_hook_paint_red_border(target);
return true;
}));
Clutter.grab_pointer(eventHandler);
cairo_pattern_destroy (gradient);
cairo_destroy (cr);
}
+
+static void
+hook_paint_red_border (ClutterActor *actor,
+ gpointer user_data)
+{
+ CoglColor color;
+ ClutterGeometry geom;
+ float width = 2;
+ float x2;
+ float y2;
+
+ cogl_color_set_from_4ub (&color, 0xff, 0, 0, 0xc4);
+ cogl_set_source_color (&color);
+
+ clutter_actor_get_allocation_geometry (actor, &geom);
+ x2 = geom.x + geom.width;
+ y2 = geom.y + geom.height;
+
+ /** clockwise order **/
+ cogl_rectangle (geom.x, geom.y,
+ x2, geom.y + width);
+ cogl_rectangle (x2 - width, geom.y + width,
+ x2, y2);
+ cogl_rectangle (x2 - width, y2,
+ geom.x, y2 - width);
+ cogl_rectangle (geom.x + width, y2 - width,
+ geom.x, geom.y + width);
+}
+
+guint
+shell_add_hook_paint_red_border (ClutterActor *actor)
+{
+ return g_signal_connect_after (G_OBJECT (actor), "paint",
+ G_CALLBACK (hook_paint_red_border), NULL);
+}